#include <gtkmm.h>

class MyWindow : public Gtk::Window {
public:
    MyWindow() {
        set_title("GtkSwitch Example");  // 设置窗口标题
        set_default_size(200, 100);  // 设置窗口默认大小

        Gtk::Box* vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10));  // 创建垂直盒子容器
        add(*vbox);  // 将盒子容器添加到窗口

        switch_button = Gtk::manage(new Gtk::Switch());  // 创建开关控件
        vbox->pack_start(*switch_button);  // 将开关控件添加到盒子容器中

        // 连接开关状态改变事件的信号处理函数
        switch_button->signal_state_set().connect(sigc::mem_fun(*this, &MyWindow::on_switch_state_set));

        show_all_children();  // 显示所有子控件
    }

    virtual ~MyWindow() {}

protected:
    // 开关状态改变事件处理函数
    bool on_switch_state_set(bool state) {
        if (state) {
            set_title("Switch is ON");  // 当开关处于“开”状态时，修改窗口标题
        } else {
            set_title("Switch is OFF");  // 当开关处于“关”状态时，修改窗口标题
        }
        return true;  // 返回 true 表示接受状态变化
    }

    Gtk::Switch* switch_button;  // 开关控件指针
};

int main(int argc, char *argv[]) {
    auto app = Gtk::Application::create(argc, argv, "com.example.GtkSwitchExample");  // 创建 GTK 应用程序实例

    MyWindow window;  // 创建主窗口实例

    return app->run(window);  // 运行应用程序
}

